{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "786d7614-9949-43d7-95c0-ba14b4d40004",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1.57.0\n",
      "Performing interactive authentication. Please follow the instructions on the terminal.\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code CM4KPQTWE to authenticate.\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Interactive authentication successfully completed.\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "{'id': '/subscriptions/5f7e7551-1c5d-42a7-9cdd-7582134d0f5f/resourceGroups/iiot-book2-resource/providers/Microsoft.MachineLearningServices/workspaces/iiot-book2-ml-workspace',\n",
       " 'name': 'iiot-book2-ml-workspace',\n",
       " 'identity': {'principal_id': '4cd35736-b2a7-4978-9c70-c5155633054e',\n",
       "  'tenant_id': 'cfb4f1d4-a84e-4e91-9df0-435862090a34',\n",
       "  'type': 'SystemAssigned'},\n",
       " 'location': 'eastus2',\n",
       " 'type': 'Microsoft.MachineLearningServices/workspaces',\n",
       " 'tags': {},\n",
       " 'sku': 'Basic',\n",
       " 'workspaceid': '1352f7c8-4b9b-4670-9827-bb2f337ec25b',\n",
       " 'sdkTelemetryAppInsightsKey': 'e1f7b545-6243-4abf-ba76-c5691d2edb62',\n",
       " 'description': '',\n",
       " 'friendlyName': 'iiot-book2-ml-workspace',\n",
       " 'creationTime': '2024-08-13T10:36:53.1780731Z',\n",
       " 'keyVault': '/subscriptions/5f7e7551-1c5d-42a7-9cdd-7582134d0f5f/resourceGroups/iiot-book2-resource/providers/Microsoft.Keyvault/vaults/iiotbook2mlwor9593714222',\n",
       " 'applicationInsights': '/subscriptions/5f7e7551-1c5d-42a7-9cdd-7582134d0f5f/resourceGroups/iiot-book2-resource/providers/Microsoft.insights/components/iiotbook2mlwor1740702465',\n",
       " 'storageAccount': '/subscriptions/5f7e7551-1c5d-42a7-9cdd-7582134d0f5f/resourceGroups/iiot-book2-resource/providers/Microsoft.Storage/storageAccounts/iiotbook2storage',\n",
       " 'hbiWorkspace': False,\n",
       " 'provisioningState': 'Deleting',\n",
       " 'discoveryUrl': 'https://eastus2.api.azureml.ms/discovery',\n",
       " 'notebookInfo': {'fqdn': 'ml-iiot-book2-ml-w-eastus2-1352f7c8-4b9b-4670-9827-bb2f337ec25b.eastus2.notebooks.azure.net',\n",
       "  'resource_id': '38d84e0b851d41cba930112a81a95626'},\n",
       " 'v1LegacyMode': False}"
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import azureml.core \n",
    "print(azureml.core.VERSION) \n",
    "from azureml.core import Workspace \n",
    "ws = Workspace.from_config()\n",
    "ws.get_details()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "089885e6-2f1d-4790-8b4d-405ad8feb42d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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Ng9MIiOIi4vDnTt3UKlSJXTt2lXuOEQmw5uOkrHoXXrOnDmDv//+G1OmTEFRURE+/vhjVKlSBS1btsTEiRONkZHIJmmntl599VU4OTnJnIbIdDi9RcZSpjU9FStWRGRkJNq2bYs2bdpg69atWL9+PU6ePInZs2cbOiORzcnPz8fGjRsBcGqLbA9vOkrGonfp2bx5M2JjYxEbG4uLFy+icuXKaNeuHebPn4+wsDBjZCSyObt27UJmZiaqVauG9u3byx2HyKQ40kPGonfpGTVqFNq3b48RI0YgNDQUgYGBxshFZNO01+bp378/7Oz0noUmsmhcyEzGonfpSUtLM0YOIvoftVqNX375BQCntsg2cSEzGUuZ1vQUFxdjy5YtuHz5MhQKBV544QVERUXB3t7e0PmIbM7mzZuRn5+P+vXro1GjRnLHITI5Tm+Rsehdeq5du4aXX34Zf/31F+rVqwchBK5evQp/f3/s2LEDtWrVMkZOIpuhPWtr4MCBUCgUMqchMj0uZCZj0XuxwNtvv41atWohOTkZp06dwunTp5GUlISAgAC8/fbbxshIZDP+/vtv/PbbbwAerOchskUc6SFj0XukJy4uDseOHYOnp6f0XOXKlTF79my0adPGoOGIbE1MTAw0Gg1atmzJUVOyWVzITMai90iPUql87JBjVlYWL6BGVE7aqS0uYCZbxoXMZCx6l55u3bph5MiROH78OIQQEELg2LFjeOONNxAZGWmMjEQ24fr16zh+/Djs7OzQt29fueMQyYbTW2QsepeehQsXolatWggODoazszOcnZ3Rpk0b1K5dG19//bUxMhLZhA0bNgAAOnXqBG9vb5nTEMmHC5nJWPRe01OxYkVs3boViYmJuHz5MgCgQYMGqF27tsHDEdkKIYTOBQmJbJl2pCc7OxsajYYX6CSDKdN1egCgTp06UtHhabVE5XP27Fn88ccfUCqV6Nmzp9xxiGSlHekBgJycHKkEEZVXmerz8uXLERgYKE1vBQYG4ocffjB0NiKboV3A3L17d3h4eMichkhezs7O0ugOp7jIkPQe6fn4448xf/58jB07FsHBwQCAo0eP4t1338XNmzfx+eefGzwkkTXTaDTSeh6etUX0YPagQoUKUKvVXMxMBqV36fn222+xbNkynXUHkZGReOmllzB27FiWHiI9HTp0CLdv34ZKpUJERITc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\n",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import pandas as pd \n",
    "\n",
    "import matplotlib.pyplot as plt \n",
    "import numpy as np \n",
    "\n",
    "\n",
    "def wind_turbine_model(x): \n",
    "    # cut-in speed vs cut-out speed \n",
    "    if x<4.5 or x>21.5: \n",
    "        return 0.0 \n",
    "    # standard operability \n",
    "    return 376.936 - 195.8161*x + 33.75734*x**2 - 2.212492*x**3 + 0.06309095*x**4 - 0.0006533647*x**5 \n",
    "\n",
    "reference_power = [wind_turbine_model(x) for x in range(0,30)] \n",
    "\n",
    "# show data and reference \n",
    "fig, ax = plt.subplots() \n",
    "ax.plot(reference_power,'k') \n",
    "ax.set_xlabel('wind speed (m/s)') \n",
    "ax.set_ylabel('power (kW)') \n",
    "plt.show() "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "b1c4b7b2-42f3-433e-a2e1-ffdfee0ef283",
   "metadata": {},
   "outputs": [
    {
     "ename": "ExperimentExecutionException",
     "evalue": "ExperimentExecutionException:\n\tMessage: {\n    \"error_details\": {\n        \"componentName\": \"project\",\n        \"correlation\": {\n            \"operation\": \"00767d971a3555719d01ccb72b6cb8ca\",\n            \"request\": \"bbaf428ad4733d64\"\n        },\n        \"environment\": \"eastus2\",\n        \"error\": {\n            \"code\": \"UserError\",\n            \"message\": \"Please make sure workspace msi has permission to the workspace keyvault and workspace keyvault exists\"\n        },\n        \"location\": \"eastus2\",\n        \"statusCode\": 400,\n        \"time\": \"2024-08-13T15:51:27.9702947+00:00\"\n    },\n    \"status_code\": 400,\n    \"url\": \"https://eastus2.experiments.azureml.net/content/v1.0/subscriptions/5f7e7551-1c5d-42a7-9cdd-7582134d0f5f/resourceGroups/iiot-book2-resource/providers/Microsoft.MachineLearningServices/workspaces/iiot-book2-ml-workspace/snapshots/latest/metadata\"\n}\n\tInnerException None\n\tErrorResponse \n{\n    \"error\": {\n        \"message\": \"{\\n    \\\"error_details\\\": {\\n        \\\"componentName\\\": \\\"project\\\",\\n        \\\"correlation\\\": {\\n            \\\"operation\\\": \\\"00767d971a3555719d01ccb72b6cb8ca\\\",\\n            \\\"request\\\": \\\"bbaf428ad4733d64\\\"\\n        },\\n        \\\"environment\\\": \\\"eastus2\\\",\\n        \\\"error\\\": {\\n            \\\"code\\\": \\\"UserError\\\",\\n            \\\"message\\\": \\\"Please make sure workspace msi has permission to the workspace keyvault and workspace keyvault exists\\\"\\n        },\\n        \\\"location\\\": \\\"eastus2\\\",\\n        \\\"statusCode\\\": 400,\\n        \\\"time\\\": \\\"2024-08-13T15:51:27.9702947+00:00\\\"\\n    },\\n    \\\"status_code\\\": 400,\\n    \\\"url\\\": \\\"https://eastus2.experiments.azureml.net/content/v1.0/subscriptions/5f7e7551-1c5d-42a7-9cdd-7582134d0f5f/resourceGroups/iiot-book2-resource/providers/Microsoft.MachineLearningServices/workspaces/iiot-book2-ml-workspace/snapshots/latest/metadata\\\"\\n}\"\n    }\n}",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mExperimentExecutionException\u001b[0m              Traceback (most recent call last)",
      "Input \u001b[0;32mIn [3]\u001b[0m, in \u001b[0;36m<cell line: 7>\u001b[0;34m()\u001b[0m\n\u001b[1;32m      4\u001b[0m exp \u001b[38;5;241m=\u001b[39m Experiment(workspace\u001b[38;5;241m=\u001b[39mws, name\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mwind-turbine-experiment-1\u001b[39m\u001b[38;5;124m'\u001b[39m)  \n\u001b[1;32m      6\u001b[0m \u001b[38;5;66;03m# start a run \u001b[39;00m\n\u001b[0;32m----> 7\u001b[0m run \u001b[38;5;241m=\u001b[39m \u001b[43mexp\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mstart_logging\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m      8\u001b[0m run\u001b[38;5;241m.\u001b[39mlog_list(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mWind Turbine Model\u001b[39m\u001b[38;5;124m'\u001b[39m, reference_power) \u001b[38;5;66;03m# log a list of values  \u001b[39;00m\n\u001b[1;32m     10\u001b[0m \u001b[38;5;66;03m# finish the run  \u001b[39;00m\n",
      "File \u001b[0;32m/opt/conda/lib/python3.10/site-packages/azureml/core/experiment.py:279\u001b[0m, in \u001b[0;36mExperiment.start_logging\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m    244\u001b[0m \u001b[38;5;124;03m\"\"\"Start an interactive logging session and create an interactive run in the specified experiment.\u001b[39;00m\n\u001b[1;32m    245\u001b[0m \n\u001b[1;32m    246\u001b[0m \u001b[38;5;124;03m.. remarks::\u001b[39;00m\n\u001b[0;32m   (...)\u001b[0m\n\u001b[1;32m    276\u001b[0m \u001b[38;5;124;03m:rtype: azureml.core.Run\u001b[39;00m\n\u001b[1;32m    277\u001b[0m \u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m    278\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mazureml\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mcore\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mrun\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m Run\n\u001b[0;32m--> 279\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mRun\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_start_logging\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43m_parent_logger\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_logger\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n",
      "File \u001b[0;32m/opt/conda/lib/python3.10/site-packages/azureml/core/run.py:615\u001b[0m, in \u001b[0;36mRun._start_logging\u001b[0;34m(experiment, name, run_id, outputs, snapshot_directory, **kwargs)\u001b[0m\n\u001b[1;32m    613\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m snapshot_directory:\n\u001b[1;32m    614\u001b[0m     \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 615\u001b[0m         \u001b[43mrun\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mtake_snapshot\u001b[49m\u001b[43m(\u001b[49m\u001b[43msnapshot_directory\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m    616\u001b[0m     \u001b[38;5;28;01mexcept\u001b[39;00m SnapshotException \u001b[38;5;28;01mas\u001b[39;00m snapshot_ex:\n\u001b[1;32m    617\u001b[0m         error_msg \u001b[38;5;241m=\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mFailed to take a snapshot of \u001b[39m\u001b[38;5;132;01m{}\u001b[39;00m\u001b[38;5;124m. Pass snapshot_directory=None to start_logging \u001b[39m\u001b[38;5;124m\"\u001b[39m \\\n\u001b[1;32m    618\u001b[0m                     \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mto skip taking a snapshot of the given directory.\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;241m.\u001b[39mformat(snapshot_directory)\n",
      "File \u001b[0;32m/opt/conda/lib/python3.10/site-packages/azureml/core/run.py:2207\u001b[0m, in \u001b[0;36mRun.take_snapshot\u001b[0;34m(self, file_or_folder_path)\u001b[0m\n\u001b[1;32m   2189\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mtake_snapshot\u001b[39m(\u001b[38;5;28mself\u001b[39m, file_or_folder_path):\n\u001b[1;32m   2190\u001b[0m     \u001b[38;5;124mr\u001b[39m\u001b[38;5;124;03m\"\"\"Save a snapshot of the input file or folder.\u001b[39;00m\n\u001b[1;32m   2191\u001b[0m \n\u001b[1;32m   2192\u001b[0m \u001b[38;5;124;03m    .. remarks::\u001b[39;00m\n\u001b[0;32m   (...)\u001b[0m\n\u001b[1;32m   2205\u001b[0m \u001b[38;5;124;03m    :rtype: str\u001b[39;00m\n\u001b[1;32m   2206\u001b[0m \u001b[38;5;124;03m    \"\"\"\u001b[39;00m\n\u001b[0;32m-> 2207\u001b[0m     \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_client\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mtake_snapshot\u001b[49m\u001b[43m(\u001b[49m\u001b[43mfile_or_folder_path\u001b[49m\u001b[43m)\u001b[49m\n",
      "File \u001b[0;32m/opt/conda/lib/python3.10/site-packages/azureml/_run_impl/run_history_facade.py:704\u001b[0m, in \u001b[0;36mRunHistoryFacade.take_snapshot\u001b[0;34m(self, file_or_folder_path, _raise_on_validation_failure)\u001b[0m\n\u001b[1;32m    701\u001b[0m     \u001b[38;5;28;01mraise\u001b[39;00m SnapshotException(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mCannot take snapshot as the run already has one: \u001b[39m\u001b[38;5;132;01m{}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;241m.\u001b[39mformat(existing_snapshot))\n\u001b[1;32m    703\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_log_context(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mTakingSnapshot\u001b[39m\u001b[38;5;124m\"\u001b[39m) \u001b[38;5;28;01mas\u001b[39;00m slcx:\n\u001b[0;32m--> 704\u001b[0m     snapshot_id \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msnapshots\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcreate_snapshot\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m    705\u001b[0m \u001b[43m        \u001b[49m\u001b[43mfile_or_folder_path\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    706\u001b[0m \u001b[43m        \u001b[49m\u001b[43mraise_on_validation_failure\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m_raise_on_validation_failure\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m    708\u001b[0m     slcx\u001b[38;5;241m.\u001b[39mdebug(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mCreated snapshot \u001b[39m\u001b[38;5;132;01m{}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;241m.\u001b[39mformat(snapshot_id))\n\u001b[1;32m    709\u001b[0m     \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39madd_properties({\n\u001b[1;32m    710\u001b[0m         PropertyKeys\u001b[38;5;241m.\u001b[39mSNAPSHOT_ID: snapshot_id\n\u001b[1;32m    711\u001b[0m     })\n",
      "File \u001b[0;32m/opt/conda/lib/python3.10/site-packages/azureml/_restclient/snapshots_client.py:91\u001b[0m, in \u001b[0;36mSnapshotsClient.create_snapshot\u001b[0;34m(self, file_or_folder_path, retry_on_failure, raise_on_validation_failure)\u001b[0m\n\u001b[1;32m     89\u001b[0m \u001b[38;5;66;03m# Get the previous snapshot for this project\u001b[39;00m\n\u001b[1;32m     90\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m---> 91\u001b[0m     parent_root, parent_snapshot_id \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_cache\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget_latest_snapshot\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m     92\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m json\u001b[38;5;241m.\u001b[39mdecoder\u001b[38;5;241m.\u001b[39mJSONDecodeError:\n\u001b[1;32m     93\u001b[0m     \u001b[38;5;66;03m# Removing the cache file if found corrupted\u001b[39;00m\n\u001b[1;32m     94\u001b[0m     \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_cache\u001b[38;5;241m.\u001b[39mremove_latest()\n",
      "File \u001b[0;32m/opt/conda/lib/python3.10/site-packages/azureml/_base_sdk_common/project_snapshot_cache.py:48\u001b[0m, in \u001b[0;36mContentSnapshotCache.get_latest_snapshot\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m     46\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m response\u001b[38;5;241m.\u001b[39mstatus_code \u001b[38;5;241m>\u001b[39m\u001b[38;5;241m=\u001b[39m \u001b[38;5;241m400\u001b[39m:\n\u001b[1;32m     47\u001b[0m     \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mazureml\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01m_base_sdk_common\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mcommon\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m get_http_exception_response_string\n\u001b[0;32m---> 48\u001b[0m     \u001b[38;5;28;01mraise\u001b[39;00m ExperimentExecutionException(get_http_exception_response_string(response))\n\u001b[1;32m     50\u001b[0m response_data \u001b[38;5;241m=\u001b[39m response\u001b[38;5;241m.\u001b[39mcontent\u001b[38;5;241m.\u001b[39mdecode(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mutf-8\u001b[39m\u001b[38;5;124m'\u001b[39m)\n\u001b[1;32m     51\u001b[0m snapshot_dict \u001b[38;5;241m=\u001b[39m json\u001b[38;5;241m.\u001b[39mloads(response_data)\n",
      "\u001b[0;31mExperimentExecutionException\u001b[0m: ExperimentExecutionException:\n\tMessage: {\n    \"error_details\": {\n        \"componentName\": \"project\",\n        \"correlation\": {\n            \"operation\": \"00767d971a3555719d01ccb72b6cb8ca\",\n            \"request\": \"bbaf428ad4733d64\"\n        },\n        \"environment\": \"eastus2\",\n        \"error\": {\n            \"code\": \"UserError\",\n            \"message\": \"Please make sure workspace msi has permission to the workspace keyvault and workspace keyvault exists\"\n        },\n        \"location\": \"eastus2\",\n        \"statusCode\": 400,\n        \"time\": \"2024-08-13T15:51:27.9702947+00:00\"\n    },\n    \"status_code\": 400,\n    \"url\": \"https://eastus2.experiments.azureml.net/content/v1.0/subscriptions/5f7e7551-1c5d-42a7-9cdd-7582134d0f5f/resourceGroups/iiot-book2-resource/providers/Microsoft.MachineLearningServices/workspaces/iiot-book2-ml-workspace/snapshots/latest/metadata\"\n}\n\tInnerException None\n\tErrorResponse \n{\n    \"error\": {\n        \"message\": \"{\\n    \\\"error_details\\\": {\\n        \\\"componentName\\\": \\\"project\\\",\\n        \\\"correlation\\\": {\\n            \\\"operation\\\": \\\"00767d971a3555719d01ccb72b6cb8ca\\\",\\n            \\\"request\\\": \\\"bbaf428ad4733d64\\\"\\n        },\\n        \\\"environment\\\": \\\"eastus2\\\",\\n        \\\"error\\\": {\\n            \\\"code\\\": \\\"UserError\\\",\\n            \\\"message\\\": \\\"Please make sure workspace msi has permission to the workspace keyvault and workspace keyvault exists\\\"\\n        },\\n        \\\"location\\\": \\\"eastus2\\\",\\n        \\\"statusCode\\\": 400,\\n        \\\"time\\\": \\\"2024-08-13T15:51:27.9702947+00:00\\\"\\n    },\\n    \\\"status_code\\\": 400,\\n    \\\"url\\\": \\\"https://eastus2.experiments.azureml.net/content/v1.0/subscriptions/5f7e7551-1c5d-42a7-9cdd-7582134d0f5f/resourceGroups/iiot-book2-resource/providers/Microsoft.MachineLearningServices/workspaces/iiot-book2-ml-workspace/snapshots/latest/metadata\\\"\\n}\"\n    }\n}"
     ]
    }
   ],
   "source": [
    "from azureml.core import Experiment  \n",
    "\n",
    "# create a new experiment  \n",
    "exp = Experiment(workspace=ws, name='wind-turbine-experiment')  \n",
    "\n",
    "# start a run \n",
    "run = exp.start_logging()\n",
    "run.log_list('Wind Turbine Model', reference_power) # log a list of values  \n",
    "\n",
    "# finish the run  \n",
    "run.complete()  \n",
    "\n",
    "print(run.get_portal_url())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "ecb55c61-313f-4fd5-9c71-b682091b4d7c",
   "metadata": {},
   "outputs": [],
   "source": [
    "# clean the workspace \n",
    "ws.delete(delete_dependent_resources=True) "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "acc42c17-c250-4f98-9f46-5d2730f9b402",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
